package xml;

import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import dominioTO.ProveedorTO;


public class ProveedorXmlDao {
	private static final String ARCHIVO = "http://localhost:8080/ServidorNegocio/xml/AltaProveedor.xml";
	private static ProveedorXmlDao instancia;
	private Document doc;
	
	public static ProveedorXmlDao getInstancia(){
		if(instancia == null){
			instancia = new ProveedorXmlDao();
			instancia.crearDocumento();
		}
		return instancia;
	}
	
	private void crearDocumento(){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			doc = builder.parse(ARCHIVO);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		
	public List<ProveedorTO> recuperarProveedores(){
		List<ProveedorTO> proveedores= new ArrayList<ProveedorTO>();
		NodeList nodos = doc.getElementsByTagName("Proveedor");
		for(int i = 0; i < nodos.getLength(); i++){
			if(nodos.item(i).hasChildNodes()){
				proveedores.add(mapProveedor((Element)nodos.item(i)));
			}
		}
		return proveedores;
	}
		
	private ProveedorTO mapProveedor(Element eleProv){
		ProveedorTO prov = new ProveedorTO();
		
		prov.setCuit(eleProv.getElementsByTagName("cuit").item(0).getTextContent());
		prov.setNombre(eleProv.getElementsByTagName("razonSocial").item(0).getTextContent());
		prov.setDireccion(eleProv.getElementsByTagName("direccion").item(0).getTextContent());
		prov.setTelefono(eleProv.getElementsByTagName("telefono").item(0).getTextContent());
		
		return prov;
	}
	
	/*public void persistirClientes(Set<Cliente> clientes){
		Document doc = nuevoDocumento();
		Element root = doc.createElement("Clientes");
		doc.appendChild(root);
		for(Cliente cliente : clientes){
			Element usu = doc.createElement("Cliente");
			usu.setAttribute("Id", cliente.getId());
			root.appendChild(usu);
			Element usunom = doc.createElement("Usu-nombre");
			usunom.setTextContent(cliente.getNombre());
			usu.appendChild(usunom);
			Element usumail = doc.createElement("Usu-email");
			usumail.setTextContent(cliente.getMail());
			usu.appendChild(usumail);
		}
		aXML(doc);
	}
	
	private Document nuevoDocumento(){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			return doc;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}*/
	
	/*private void aXML(Document doc){
		try {
			Transformer transformer = TransformerFactory.newInstance().newTransformer();
			Source src = new DOMSource(doc);
			Result dest = new StreamResult(new FileWriter(new File(ARCHIVO)));
			transformer.transform(src, dest);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}*/
}
